/**
 * 音频管理
 * @author 神兽白泽
 * @description 交流群：415468592
 */
import { _decorator, AudioSource } from 'cc';
import * as cc from 'cc';
import LoaderMgr from "../loader/LoaderMgr";
import { AudioConfig } from "./AudioConfig";

export default class AudioMgr {
    /** 音频列表 - 池子 */
    private static _audio_list: Map<string, AudioSource> = new Map();
    /** BGM */
    private static _audio_bgm: AudioSource | null = null;
    /** 音量 */
    private static volume: number = 1;
    /** 音频根路径 */
    private static path: string = "audio/";
    /**
    * 播放音频
    * @param audio_name 音频文件名
    * @param volume 音量
    * @param loop 是否循环
    * @param bgm 是bgm
    */
    public static async play(audio_name: keyof typeof AudioConfig, loop: boolean = false, volume?: number, bgm?: boolean) {
        let comp_audio = this._audio_list.get(audio_name);
        if (!comp_audio) {
            let node_audio = new cc.Node();
            comp_audio = node_audio.addComponent(cc.AudioSource);
            this._audio_list.set(audio_name, comp_audio);
        }
        if (!comp_audio.clip) {
            let assert = await LoaderMgr.loadAssetByType(this.path + audio_name, cc.AudioClip)
            comp_audio.clip = assert;
        }
        if (bgm && this._audio_bgm) this._audio_bgm.stop();
        comp_audio.volume = volume ? volume : this.volume;
        comp_audio.loop = loop;
        comp_audio.play();
        if (bgm) this._audio_bgm = comp_audio;
    }
    /**
    * 停止播放
    * @param audio_name 音频文件名
    * @returns
    */
    public static stop(audio_name: keyof typeof AudioConfig) {
        let comp_audio = this._audio_list.get(audio_name);
        if (!comp_audio) {
            console.log("音频不存在");
            return;
        }
        comp_audio.stop();
    }
    /**
    * 暂停播放
    * @param audio_name 音频文件名
    * @returns
    */
    public static pause(audio_name: keyof typeof AudioConfig) {
        let comp_audio = this._audio_list.get(audio_name);
        if (!comp_audio) {
            console.log("音频不存在");
            return;
        }
        comp_audio.pause();
    }
    /**
    * 继续播放 BGM
    */
    public static resumeBGM() {
        if (!this._audio_bgm) {
            console.log("音频不存在");
            return;
        }
        if (!this._audio_bgm.playing) {
            console.log("重新播放bgm");
            this._audio_bgm.play();
        } else {
            console.log("bgm 播放中");
        }
    }
}